Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]funkcja -> problem z number_format
agataperz
post
Post #1





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 24.03.2009
Skąd: Hamburg DE

Ostrzeżenie: (0%)
-----


Witam,

mam problem otóż kiedyś prosiłam kogoś o napisanie pewnego skryptu.
Dziś ten skrypt zaczął robić błędy - nie zapisuje cen powyżej 1000 zł
Owa funkcja skanuje ceny z witryny i zapisuje je do bazy.
Strona która jest skanowana ma zapisane ceny namber_format($liczba, 2 ',' , ' ')
Gdy tylko pojawi się np cena: 1 234,56 zapisuje ją jako 1.
Możecie mi pomóc poprawić ten skrypt?
  1. public function getProductDetail($html, $info, $request) {
  2. $dom = @DOMDocument::loadHTML($html);
  3. $xpath = new DOMXPath($dom);
  4.  
  5. $product = array();
  6.  
  7. $code = trim((string) $xpath->evaluate("//div[@id='st_product-show_success_frame_info']//ul[1]/li[2]/text()")->item(0)->nodeValue);
  8.  
  9. $product['code'] = $code;
  10. // $product['url'] = trim($url);
  11. $product['name'] = trim($xpath->evaluate("//div[@id='st_product-show_success_frame_info']//ul[1]/li[1]/h1")->item(0)->nodeValue);
  12. $product['category'] = trim($xpath->evaluate("//div[@id='st_product-show_success_frame_info']//ul[1]/li[3]/text()")->item(0)->nodeValue);
  13. $product['short_desc'] = trim($xpath->evaluate("//div[@id='st_product-show_success_short_description']")->item(0)->nodeValue);
  14.  
  15. //save info as html content
  16. $domInfo = new DOMDocument();
  17. $node = $xpath->evaluate("//div[@id='st_application-st_product-product_description']")->item(0);
  18. $domInfo->appendChild($domInfo->importNode($node, true));
  19. $name5_html = $domInfo->saveHTML();
  20.  
  21. $charAt = stripos($name5_html,'>');
  22. $name5_html = substr($name5_html, $charAt + 1, strlen($name5_html));
  23. $name5_html = substr($name5_html, 0, strlen($name5_html) - 6);
  24. $product['html_desc'] = $name5_html;
  25.  
  26. $product['price'] = 0;
  27. $name6 = $xpath->evaluate("//span[@id='st_product_options-price-brutto']");
  28. if($name6->length) {
  29. list($price, $garbage) = explode(' ', trim($name6->item(0)->nodeValue), 2);
  30. $product['price'] = str_replace(',', '.', $price);
  31. }
  32. }

Próbowałam wstawić w kilku miejscach
  1. $product['price'] = str_replace(' ', '', $price);

i niestety nie daje to pożądanego efektu.
Go to the top of the page
+Quote Post
Damonsson
post
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


str_replace powinno zadziałać, może gdzieś nadpisujesz znowu $product['price'] ?

Ten post edytował Damonsson 19.02.2013, 19:56:16
Go to the top of the page
+Quote Post
_Borys_
post
Post #3





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

Ostrzeżenie: (0%)
-----


Ostatnia funkcja explode() robi sieczkę ponieważ spację w cenie traktuje jako rozdzielenie.
Go to the top of the page
+Quote Post
agataperz
post
Post #4





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 24.03.2009
Skąd: Hamburg DE

Ostrzeżenie: (0%)
-----


właśnie też się tego domyśliłam że explode() robi bigos
tylko jak rozwiązać ten problem gdyż explode() musi zostać żeby oddzielić cenę od reszty np. zł
jeżeli zlikwiduje str_replace spację to dodają mi się oprócz ceny inne śmieci i cena nie zapisuje mi sie w decimal(8,2)
albo jeżeli zrobie:
  1. if($name6->length) {
  2. list($price, $garbage) = explode(' ', trim($name6->item(0)->nodeValue), 2);
  3. $price = str_replace(' ', '', $price);
  4. $product['price'] = str_replace(',', '.', $price);
  5. }

tez nie dziala.

sprawdzalam caly skrypt to tylko tutaj w tej funkcji jest użyta zmienna $produkt['prince'] oprócz miejsca zapisania do bazy danch

Ten post edytował agataperz 20.02.2013, 13:44:09
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 02:16